<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <span class="reduce">-</span>
    <input type="text" value="1">
    <span class="add">+</span>


    <script>

        const oInp = document.querySelector('input');
        const oAdd = document.querySelector('.add');

        function outer() {
            // 数量的初始值
            let n = oInp.value * 1;
            return {
                getN: function () {
                    return n
                },
                setN: function (v) {
                    n = v
                }
            }
        }


        const obj = outer();


        oAdd.onclick = function () {
            let x = obj.getN();
            x++;
            // 修改了数量
            obj.setN(x);
            oInp.value = obj.getN();
        }




        function sum(a, b) {
            var res = a + b;
            // return res
            return function () {
                ++res;
            }
        }

        // 不使用以后就释放这个地址
        // obj = null;

        // 普通的返回值   也是为了让外面可以使用函数里面的局部变量   --- 调用函数，接受这个结果
        // 闭包    返回了一个引用数据类型(通常都包含了函数，这个函数使用并有修改上一层的局部变量)

        // 闭包实际上延长了变量的生命周期   ---- 也会导致变量始终无法释放


    </script>

</body>

</html>